/******************************************************************************
 * Project:		Packet Sniffer
 * Author:		Jonathan Buttner
 * Date:		1.17.2010
 * 
 * This file takes care of determining which function to call given on a
 * specific string given.
 *****************************************************************************/

/******************************************************************************
 * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
 * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the Politecnico di Torino, CACE Technologies 
 * nor the names of its contributors may be used to endorse or promote 
 * products derived from this software without specific prior written 
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *****************************************************************************/

#include "InputParser.h"
#include "Commands.h"
#include <string.h>
#include <stdlib.h>

/******************************************************************************
 * matchCmd() determines which command to execute by matching the user entered
 * string with the existing list of commands
 *
 * Memebers:
 *  userStr is a 2d array of the strings the user entered.
 *  handle is a pcap_t struct that will hold the listening session if there
 *  is one.
 * Pre:
 *	userStr and commandName point to strings, so the pointer will be
 *  incremented.
 *  handle points to the current listening session (can be NULL)
 * Post:
 *	position [0] in each array will be checked etc...
 *
 *****************************************************************************/
Error matchCmd( char (*userStr)[80],
			  pcap_if_t *device, pcap_t *handle )
{
	Error error;
	int num = 0; /* Defualt would be read infinitely */
	error = OK;
	if ( strcmp( userStr[0], Stop->name ) == 0 )
		Stop->execute( handle, NULL, NULL );
	else if ( strcmp( userStr[0], Listen->name ) == 0 )
	{
		int len = strlen( userStr[1] );
		if ( len != 0 )
			num = atoi( userStr[1] );
		if ( num < 0 )
			return LISNUMPROB; /* number of packets cannot be negative! */
		error = Listen->execute( device, &num, &handle );
	}
	
	return error;
}

void initInput()
{
	initCmd();
}